/*----------------------------------------------------------------------------------------
*
*  Copyright 2019, Gao Hai Hui, <fromzeropoint@126.com>.  All rights reserved.
*  https://gitee.com/helloworldghh/xoskit.git
*  Use of this source code is governed by a MIT license
*  that can be found in the License file.
*
----------------------------------------------------------------------------------------*/
#include "../import/head.h"
#include "../data_struct/head.h"
#include "../helper_proc/head.h"
#include "../msg_notify/head.h"
#include "../macro/head.h"
#include "../impl/head.h"
#include "../msg/head.h"
#include "helper_main.h"
#include "helper_cat.h"

namespace xos_http
{

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    static helper_cat * cat_ptr = 0;

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    helper_cat::helper_cat() : m_pTest(0)
    {
    }

    helper_cat::~helper_cat()
    {
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int helper_cat::start()
    {
        int ret = 0;

        xos_box::i_str_property * pPortProperty = port::get();
        int nPropNum = 0;

        if( 0 == ret )
        {
            nPropNum = pPortProperty->size();
            pPortProperty->reset();
        }

        if( 0 == ret )
        {
            get()->test()->set_notify( helper_main::get(), MAIN_STARTED );
            get()->test()->reset();
        }

        for( int i = 0; ( 0 == ret ) && ( i < nPropNum ); ++i )
        {
            xos_box::i_variant * pV = 0;
            {
                pV = pPortProperty->next( 0, 0, 0, 0 );
            }
            connection::T * pConnect = 0;
            port * pPort = 0;
            {
                xos_stl::init_pool_item( pConnect );
                pPort = (port *)pV->obj( 0 );
            }
            {
                pConnect->set_local_addr( "", pPort->m_nPort );
                pPort->m_pConnect = pConnect;
                pConnect->m_pPort = pPort;
            }
            {
                notify_tcp obj;
                xos_box::i_msg * pMsg = 0;
                obj.post_init_server( pMsg, pConnect );
            }
            get()->test()->add_num( 1 );
        }

        if( 0 == ret )
        {
            get()->test()->test( 0 );
        }

        return ret;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    xos_box::i_all_done_test * helper_cat::test()
    {
        return m_pTest;
    }

    int helper_cat::init_test()
    {
        int ret = 0;
        m_pTest = mgr::container()->box()->all_done_test();
        return ret;
    }

    int helper_cat::term_test()
    {
        int ret = 0;
        xos_stl::release_interface( m_pTest );
        return ret;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // static

    helper_cat * helper_cat::get()
    {
        return cat_ptr;
    }

    int helper_cat::init()
    {
        int ret = 0;
        xos_stl::init_obj( cat_ptr );
        get()->init_test();
        return ret;
    }

    int helper_cat::term()
    {
        int ret = 0;
        get()->term_test();
        xos_stl::term_obj( cat_ptr );
        return ret;
    }

    //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 

    int helper_cat::all_done_test( int nAdd )
    {
        int ret = 0;
        test()->test( nAdd );
        return ret;
    }

} // xos_http
